home *** CD-ROM | disk | FTP | other *** search
/ Gekkan Dennou Club 140 / Gekkan Dennou Club - 2000.1 Vol. 140 (Japan).7z / Gekkan Dennou Club - 2000.1 Vol. 140 (Japan) (Track 1).bin / tools / xpicw / xpicw110.lzh / WLSource / guru.s < prev    next >
Encoding:
Text File  |  1997-04-10  |  2.1 KB  |  139 lines

  1. *    guru.s
  2. *        ぐるぐる / 最高速 = 3
  3. *            by Mitsuky
  4.  
  5.  
  6. SPEED_MAX    equ    3
  7.  
  8.     .offset    8        * 引き数
  9. _source_ptr:    .ds.l    1
  10. _dest_ptr:    .ds.l    1
  11. _speed:        .ds.l    1
  12. _vdisp:        .ds.l    1
  13.  
  14.  
  15.  
  16.     .text
  17.     .even
  18.  
  19.     .dc.b    'WL10',$0d,$0a
  20.     .dc.b    'ぐるぐる / 最高速 = 3',$0d,$0a
  21.     .dc.b    '    by Mitsuky',$0d,$0a
  22.     .dc.b    $1a
  23.     .even
  24.  
  25. guru:
  26.     link    a6,#0
  27.     movem.l    d1-d7/a0-a5,-(sp)
  28.  
  29.     move.l    _speed(a6),d0
  30.     bmi    guru_ask_speed
  31.     cmpi.l    #SPEED_MAX,d0
  32.     bhi    guru_err
  33.  
  34.     tst.l    _vdisp(a6)
  35.     bmi    guru_ask_vdisp
  36.  
  37.  
  38.  
  39.     moveq.l    #SPEED_MAX,d6
  40.     sub.w    d0,d6        * d6.w = vdisp 待ち回数-1
  41.  
  42.     movea.l    _source_ptr(a6),a2    * a2.l = 転送元アドレス
  43.     movea.l    _dest_ptr(a6),a3    * a3.l = 転送先アドレス
  44.     lea.l    table(pc),a4
  45.  
  46.     moveq.l    #64-1,d7    * d7.w = ループ回数-1
  47. guru_loop:
  48.  
  49.     move.w    d6,d0
  50. @@:    bsr    vdisp
  51.     dbra    d0,@b
  52.  
  53.     movea.l    a2,a0
  54.     movea.l    a3,a1
  55.  
  56.     movem.l    a2-a4,-(sp)
  57.  
  58.     moveq.l    #64-1,d5
  59. guru_loop_y:
  60.     movem.l    (a0)+,d0-d4/a2-a4
  61.     movem.l    d0-d4/a2-a4,(a1)
  62.     movem.l    (a0)+,d0-d4/a2-a4
  63.     movem.l    d0-d4/a2-a4,32*1(a1)
  64.     movem.l    (a0)+,d0-d4/a2-a4
  65.     movem.l    d0-d4/a2-a4,32*2(a1)
  66.     movem.l    (a0)+,d0-d4/a2-a4
  67.     movem.l    d0-d4/a2-a4,32*3(a1)
  68.  
  69.     lea.l    (512-64)*2(a0),a0
  70.     lea.l    512*2(a1),a1
  71.  
  72.     dbra    d5,guru_loop_y
  73.  
  74.     movem.l    (sp)+,a2-a4
  75.  
  76.     move.l    (a4)+,d0
  77.     adda.l    d0,a2
  78.     adda.l    d0,a3
  79.     dbra    d7,guru_loop
  80.  
  81.     moveq.l    #0,d0
  82. guru_rts:
  83.     movem.l    (sp)+,d1-d7/a0-a5
  84.     unlk    a6
  85.     rts
  86.  
  87.  
  88. ****    ****
  89. vdisp:
  90.     movem.l    a0,-(sp)
  91.     move.l    _vdisp(a6),a0
  92.     jsr    (a0)
  93.     movem.l    (sp)+,a0
  94.     rts
  95.  
  96.  
  97. ****    ****
  98. guru_err:
  99.     moveq.l    #-1,d0
  100.     bra    guru_rts
  101.  
  102.  
  103. ****    ****
  104. guru_ask_speed:
  105.     moveq.l    #SPEED_MAX,d0
  106.     bra    guru_rts
  107.  
  108.  
  109. ****    ****
  110. guru_ask_vdisp:
  111.     move.l    _speed(a6),d0
  112.     lea.l    ask_vdisp_table(pc),a0
  113.     add.w    d0,d0
  114.     move.w    (a0,d0.w),d0
  115.     bra    guru_rts
  116.  
  117. ask_vdisp_table:
  118.     .dc.w    256,192,128,64
  119.  
  120.  
  121. *********************************************************
  122. table:
  123.     .dcb.l    7,64*2
  124.     .dcb.l    7,512*2*64
  125.     .dcb.l    7,-64*2
  126.     .dcb.l    6,-512*2*64
  127.     .dcb.l    6,64*2
  128.     .dcb.l    5,512*2*64
  129.     .dcb.l    5,-64*2
  130.     .dcb.l    4,-512*2*64
  131.     .dcb.l    4,64*2
  132.     .dcb.l    3,512*2*64
  133.     .dcb.l    3,-64*2
  134.     .dcb.l    2,-512*2*64
  135.     .dcb.l    2,64*2
  136.     .dcb.l    1,512*2*64
  137.     .dcb.l    1,-64*2
  138.  
  139.